package main

import (
	"fmt"
	"net"
)

// 自定义协议封装，
func main() {
	// 用于进行数据包的网卡的IP，一般是en0网卡吧
	serverip, _ := net.ResolveUDPAddr("udp4", "10.17.96.137:5071")
	listener, error := net.ListenUDP("udp4", serverip) //:q ,IP transports, 自定义的ip协议：.
	if error != nil {
		fmt.Println("开启监听错误" + error.Error())
		return
	}
	defer listener.Close()

	// 把监听得到的报文传输到ipv的Conn，用来解析IP报文
	//connection,err := ipv4.NewRawConn(listener)
	//if err == nil {
	//	fmt.Println("创建Connection错误" + error.Error())
	//	return
	//}
	//defer connection.Close()

	// 开启无线循环获取报文
	for {
		buf := make([]byte, 100000)
		// 获取报文同时解析IP报文，得到IP头和IP头后面部分（传输层和应用层）
		count, addr, err := listener.ReadFrom(buf)
		if err != nil {
			fmt.Println(err)
			return
		}

		// 打印IP头
		//fmt.Println("Count is:================ ")
		//fmt.Println(count)

		if count != 2863 {
			// 打印IP头后面的部分
			fmt.Println("Error count is:================ ")
			fmt.Println(count)
			fmt.Println("addr is:================ ")
			fmt.Println(addr)
		}

		//fmt.Println("body is:================\n ")
		//fmt.Println(string(buf[:count7]))
	}
}
